草庐IT

C++ ifstream 到 char *

全部标签

c++ - 为什么使用 LLVM 时 std::ifstream "break"std::getline 的缓冲?

我有一个简单的C++应用程序,它应该从POSIX命名管道中读取行:#include#include#includeintmain(){std::ifstreampipe;pipe.open("in");std::stringline;while(true){std::getline(pipe,line);if(pipe.eof()){break;}std::cout步骤:我创建了一个命名管道:mkfifoin。我使用g++-std=c++11test.cpp&&./a.out编译和运行C++代码。我将数据输入到in管道:sleepinfinity>in&#keeppipeopen,av

c++ - 将 const char* 转换为 QString

我必须使用类型为constchar*的函数的输出,我需要将其转换为QString。注意:在该函数内部,这些是返回constchar*的代码行char*ClassA::getData()const{returnconst_cast(_foo.c_str());}其中_foo是std::string。我尝试使用以下代码行,但总是得到空字符串(实际上不是空的,但只包含换行符并忽略所有其他字符)。QStringfoo1=QString(temp.getData());QStringfoo2=QString::fromLocal8Bit(temp.getData());QStringfoo3=Q

c++ - reinterpret_cast、char* 和未定义的行为

reinterpret_castingachar*(或char[N])在哪些情况下是未定义行为,何时定义行为?我应该使用什么经验法则来回答这个问题?我们从thisquestion了解到,以下是未定义的行为:alignas(int)chardata[sizeof(int)];int*myInt=new(data)int;//OK*myInt=34;//OKinti=*reinterpret_cast(data);//但是在什么时候我们可以对char数组执行reinterpret_cast并且让它不是未定义的行为?下面是几个简单的例子:没有new,只有reinterpret_cast:al

c++ - 错误 : cannot bind ‘std::basic_ostream<char>’ lvalue to ‘std::basic_ostream<char>&&’

我已经看过几个关于这个的问题,特别是Overloadingoperator&&’很有帮助。它让我知道我的问题是我正在做一些c++11无法从中推断出类型的事情。我认为我的问题的很大一部分是我正在使用的实例化类是模板化的,但最初是从指向非模板基类的指针中获得的。这是我从另一个关于如何将模板类对象放入STL容器的stackoverflow.com问题中建议的。我的课:classDbValueBase{protected:virtualvoid*null(){returnNULL;}//Neededtomakeclasspolymorphic};templateclassDbValue:pub

c++ - 是否使用 new char[] 或 malloc 的结果来转换 float * is IN(严格的别名违规)?

其中哪些代码有UB(具体来说,违反了严格的别名规则)?voida(){std::vectorv(sizeof(float));float*f=reinterpret_cast(v.data());*f=42;}voidb(){char*a=newchar[sizeof(float)];float*f=reinterpret_cast(a);*f=42;}voidc(){char*a=newchar[sizeof(float)];float*f=new(a)float;*f=42;}voidd(){char*a=(char*)malloc(sizeof(float));float*f=r

c++ - 为什么 C++ 参数类型匹配中的 `"文字 "` encouraged to decay to ` const char*`?

我正在使用c++14中的重载运算符,我尝试匹配两种类型的参数:any-old-const-char*和a-string-literal。也就是说,我正在尝试看看我是否可以区分:constchar*run_time;和"compiletime"我编写了下面的代码,如图所示,当我尝试span>>"literal"时,它调用了constchar*函数。当我#if0-outconstchar*版本时,模板版本被调用就好了。如果我将模板版本更改为采用literal的右值引用(&&)参数,则无法编译。如果我添加constchar(&literal)[]非模板版本,constchar*版本仍然是首选

C++ 为什么我可以在类定义中初始化静态 const char 但不能初始化静态 const double?

这里有两行代码:staticconstdoubleRYDBERG_CONST_EV=13.6056953;staticconstcharCHAR_H_EDGE='-';第二行编译没有错误,第一行没有编译。(错误:静态数据成员的类内初始化需要'constexpr'...)解决方案显然是在类型之前添加关键字constexpr。这是必需的,因为double不是“整数类型”。但是为什么整数和浮点类型的行为不同呢? 最佳答案 我不认为这是有充分理由的,除非它在历史上有所发展。整数类型的异常(exception)在C++11之前是可取的,因为人

c++ - double 与 char* 歧义为零

我有一个方便的C++类,可以使用double或char*进行初始化。除了参数为零的一种情况外,一切都按预期工作。structVar{Var(doublesrc){}Var(char*src){}};intmain(intargc,char*argv[]){VarA=123;VarB="abc";VarC=0;之前我用int代替double,不知为何还好。如何解决这个问题?PS:我知道我可以使用(double)0或只使用0.0,但有没有办法只允许使用0被接受为double? 最佳答案 您可以通过添加第三个构造函数来消除歧义,该构造函数

c++ - 传递 const char 而不是 std::string 作为函数参数

这是一个新手问题,但我不明白它是如何工作的。假设我有下面这样的功能voidfoo(conststd::string&v){cout以及我程序中的以下调用。foo("hi!");本质上,我将constchar*传递给一个函数参数,该参数是对字符串的const引用,所以我对这个调用有疑问。为了通过引用传递参数,我是否正确地说该变量必须至少在调用期间存在?如果是这样,传递给函数的字符串是在哪里创建的?我可以看到它可以工作:它发生是因为编译器创建了一个临时string并传递给参数或函数吗? 最佳答案 doesithappenbecauset

c++ - 为 char 分配空间

字符串构造通过做得到数据空间newchar[strlen(cp)+1];既然字符串中只有strlen(cp)字符,那多余的字节是干什么用的? 最佳答案 对于special'\0'char表示字符串的结尾。(请记住,C风格的字符串是以空字符结尾的数组)。其他有用的说明:strlen不计算'\0'(这就是为什么你需要这个额外的byte)。strcpy确实复制了'\0'。charstr[7]="String";-自行添加'\0'。charstr[]={'S','t','r','i','n','g'}-没有添加'\0'.charstr[7]